package com.tom.joke.activity.selectimg;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Log;
import android.view.View;

import androidx.annotation.Nullable;

import com.frame.library.BaseSkinActivity;
import com.tom.joke.R;
import com.tom.joke.activity.selectimg.SelectImageActivity;
import com.tom.joke.library.ImageUtil;

import java.io.File;
import java.util.ArrayList;


/**
 * 选择了图片后，预览GridView界面。也可编辑已选择的图片。
 * item右上角显示删除按钮，最后显示+号，点击能返回选择图片页面，继续选择图片。
 */
public class TestImageActivity extends BaseSkinActivity {
    private static final String TAG = "TestImageActivity";
    private ArrayList<String> mImageList = new ArrayList<>();
    public static final int SELECT_IMG_REQUEST = 11;

    @Override
    protected void setContentView() {
        setContentView(R.layout.activity_test_image);

    }

    @Override
    protected void initTitle() {

    }

    @Override
    protected void initView() {

    }

    @Override
    protected void initData() {

    }

    // 选择图片。
    public void selectImage(View view) {
        // 6.0+ 危险权限：读取内存卡权限; 拍照权限
        // 参数传递，中间再加一层，不让开发者关注太多。
        /*Intent intent = new Intent(this, SelectImageActivity.class);
        intent.putExtra(SelectImageActivity.EXTRA_SELECT_COUNT, 9);
        intent.putExtra(SelectImageActivity.EXTRA_SELECT_MODE, SelectImageActivity.MODE_MULTI);
        intent.putExtra(SelectImageActivity.EXTRA_SHOW_CAMERA, true);
        intent.putStringArrayListExtra(SelectImageActivity.EXTRA_DEFAULT_SELECTED_LIST, mImageList);
        startActivityForResult(intent, SELECT_IMG_REQUEST);*/

        // 优化：链式调用传递参数，只关注自己要传递的参数。有良好的封装性。
        ImageSelector.create().count(9).multi().showCamera(true)
                .origin(mImageList).start(this, SELECT_IMG_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == SELECT_IMG_REQUEST) {
            if (data != null) {
                mImageList = data.getStringArrayListExtra(SelectImageActivity.EXTRA_RESULT);
                // 显示已经选择的图片列表集合。
                Log.d(TAG, mImageList.toString());
            }
        }
    }

    // 压缩已选择的图片
    public void compressImage(View view) {
        for (String path : mImageList) {
            // 做decodeFile的优化，避免OOM，一般后台规定尺寸比如800px宽，小米规定宽度为720px。
            Bitmap bitmap = ImageUtil.decodeFile(path);
            String outPath = Environment.getExternalStorageDirectory().getAbsolutePath()
                    + File.separator + new File(path).getName();
            // 调用写好的native方法压缩图片。压缩后显示效果与原图差不多。压缩后保存到outPath中。
            ImageUtil.compressImage(bitmap, 75, outPath);
        }
        // todo 优化：上传的时候可能有多张，最好用线程池，速度有能快一些。比如开2-3个线程。
        // bitmap 要释放，最好在底层ndk中就处理释放。
    }

}
